iT邦幫忙

2024 iThome 鐵人賽

DAY 28
1
AI/ ML & Data

華人市場資料打撈師求生指南系列 第 28

Day 28 - DAX 的兩種「語境」 (context) - 列語境 (Row Context)

  • 分享至 

  • xImage
  •  

篩選語境篩從表格篩選出需要的列以後,被篩選出來的列該如何做運算呢,也許就會涉及到列語境的問題。

列語境

列語境簡單來說就是針對單一列做的運算,可以想像成對篩選語境篩出來的列新增一個欄位,而這個欄位是由前面其他欄位相加減乘除而成。

列語境不一定存在

在 DAX 的計算過程中,列語境不一定存在,因為並非每次計算都要新增欄位。像是大家熟悉的 SUM(order[total_amount]) 就是將篩選出來的所有列,針對 total_amount 這個欄位做加總。這樣的計算就沒有用到針對單一列的運算。

列語境範例

在列語境中,最常看到的是同一列不同欄位之間的運算,像是:

Gross Profit := SUMX ( order, order[Amount] – order[TotalCost] )

在(篩選過)的 order 表格中,先將每一列的 order[Amount] 與 order[Total Cost] 相減後,再將所有列得出的計算結果相加。其中: 在計算 order[Amount] - order[TotalCost] 時,是一列一列計算,這一列計算完,再算下一列,所謂的這一列 就是列語境:對 order 的每一列都做完這一列的 Amount 欄位以及 TotalCost 欄位相減後,再將它們相加。

常看到的 AVERAGEX() , MAXX() 等都有用到列語境

怎麼樣算是同一列

另外,在計算時,如果要互相加減乘除的欄位來自不同表格,就需要用到 RELATED() 函數。比方說每樣產品貝課的稅率不同,要計算稅後營收,這時候就可以使用 RELATED() 函數: Sales After TAX = SUMX( order, order[Total_amount] * (1 - RELATED(Product[tax_rate]))

每一列在計算時會逐列將 order 表格這一列所對應到的 product 列的 tax_rate 與 order[Total_amount] 做計算。最後再透過 SUM 將每一列相加。

列語境與篩選語境介紹結束,接下將快速說明如何發布語意模型讓他人取用。

發布與取用

注意:語意模型開發者需要有 Power BI Pro 的權限,其發布的語意模型才能讓其他人使用。

完成資料建模以及利用 DAX 定義指標後,就可以發布語意模型 (資料建模 + DAX )。發布的操作如下圖。

https://ithelp.ithome.com.tw/upload/images/20241012/20163103xmYiToeVPl.jpg

https://ithelp.ithome.com.tw/upload/images/20241012/20163103IgAyB5DOGQ.jpg

發布後,其他人就可以透過連接資料源到語意模型取得資料,自助完成報表。因為需要的指標都以 DAX 的方式呈現在右側的資料中,使用者只需要自己拖拉就可以快速完成報表。

https://ithelp.ithome.com.tw/upload/images/20241012/20163103d6STGGl9Oa.jpg

商業使用者除了可以自己使用 Power BI 連接語意模型外,也能使用 Excel 從語意模型取得資料喔。

何謂自助式分析 (Self-service Analytics):

自助式分析其實不困難,在有資料團隊以前,商業使用者跟 IT 從資料源取得資料後,自己使用 Excel 開發報表,也算是一種自助式分析。但問題就是手動而且商業邏輯散佈在各試算表中,導致花了大量時間,報表間的數字也對不上。

越好的自助式分析工具,越能減少商業使用者自己利用「程式碼」(e.g. Excel Formula, SQL) 定義商業邏輯的情況,但又同時提供足夠的彈性滿足不同顆粒度 (granularity)以及不同商業流程 (事實表) 之間交叉比對的需求。


上一篇
Day 27 - DAX 的兩種「語境」 (context) - 篩選語境 (Filter Context)
下一篇
Day 29 - 持續更新語意模型
系列文
華人市場資料打撈師求生指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言